package 关于static的使用;

/*
 * 关于 static
 * 1.启动顺序：static 启动顺序：   1.类   ------>     2.static变量 / 方法     ----->    3.对象
 * 2.公用：static 方法变量 存于方法区，被所有new的对象共享，数据类似成员变量，调用了方法区的static变量数值就变了
 * 3.属于谁：static 变量属于类，可以被当前类直接调用( Person.humanDie() ); || humanDie();
 * 4.使用范围：在一个静态方法内部 只能 调用另一个 静态方法，就像 main里 只能调用 static方法
 * 			     而在一个非静态方法里，静态方法和非静态方法都可以被直接调用 ，在成员方法里直接使用static变量方法
 */

public class Person {
	
	// Static静态 变量 / 方法
	static int peopleNum = 0;
	static void humanDie() {
		peopleNum = 0;
		System.out.println("人类灭亡了。");
	}
	
	// 对象 属性方法
	int age;
	String name;
	public Person(int age ,  String name) {
		this.name = name;
		this.age = age;
		System.out.println("你好，" + this.name);
		peopleNum ++ ; //5.非静态方法 直接调用 static变量
	}
	void leave() { //走了一个人
		System.out.println(this.name + ",离开了");
		peopleNum -- ;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Person per1 = new Person(21, "sgx"); // 创建了一个人
		System.out.println("当前总人数：" + peopleNum);
		
		Person per2 = new Person(22, "qzl");// 创建了两一个人
		System.out.println("当前总人数：" + peopleNum);
		
		per2.leave(); // 一个人离开了
		System.out.println("当前总人数：" + peopleNum);
		
		Person.humanDie(); // humanDie();   // 人类灭亡
		System.out.println("当前总人数：" + peopleNum);
		
		Person per3 = new Person(20, "wqf");

	}

}
